#include <stdio.h>
#include <stdlib.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <string.h>
// 必须与发送端相同的消息结构
struct msg_buffer {
    long msg_type;
    char msg_text[100];
} message;

int main() {
    key_t key;
    int msgid;

    // 生成相同的key
    if ((key = ftok(".", 65)) == -1) {
        perror("ftok");
        exit(1);
    }

    // 获取消息队列（不创建新队列）
    if ((msgid = msgget(key, 0644)) == -1) {
        perror("msgget");
        exit(1);
    }

    printf("接收端就绪，等待消息...\n");

    while(1) {
        // 接收类型为1的消息（最后一个参数0表示阻塞接收）
        if (msgrcv(msgid, &message, sizeof(message), 1, 0) == -1) {
            perror("msgrcv");
            exit(1);
        }
        
        printf("收到消息: %s\n", message.msg_text);
        
        // 退出检测
        if (strcmp(message.msg_text, "exit") == 0) {
            // 删除消息队列
            if (msgctl(msgid, IPC_RMID, NULL) == -1) {
                perror("msgctl");
                exit(1);
            }
            printf("消息队列已删除，接收端退出\n");
            break;
        }
    }
    
    return 0;
}
